package service;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JTextArea;

import utils.FileReader;
import utils.StringParser;
import dao.WordDAO;
import entitys.Word;

@SuppressWarnings("serial")
public class MainFrame extends JFrame {
	
	public static void main(String[] args) {
		MainFrame frMain = new MainFrame();
		frMain.setVisible(true);
	}

//	public static String FILE_NAME = "d:\\test.txt";
	private JTextArea txtOriginal = null;
	private JTextArea txtTranslated = null;
	private JButton btn = null;
	private JButton btn2 = null;
	private JButton btn3 = null;
	private JButton btn4 = null;
	public static final int WIDTH = 550;
	public static final int HEIGHT = 250;
	WordDAO wordDAO = new WordDAO();
	WordService wordService = new WordService();
	ArrayList<Word> listWords = new ArrayList<>();
	Integer n = 0;

	/**
	 * Constructor
	 */
	public MainFrame() {

		// Set up frame
		setTitle("Client english-neo for Google Translate");

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// Locate frame in center of screen
		Toolkit kit = Toolkit.getDefaultToolkit();
		Dimension screenSize = kit.getScreenSize();
		int screenHeight = screenSize.height;
		int screenWidth = screenSize.width;
		setSize(WIDTH, HEIGHT);
		setLocation((screenWidth - WIDTH) / 2, (screenHeight - HEIGHT) / 2);
		setResizable(false);

		// Create UI elements
		setLayout(new GridLayout(6, 1));

		// Original text area
		txtOriginal = new JTextArea();
		txtOriginal.setFont(new Font("SERIF", Font.ITALIC, 30));
		txtOriginal.setEditable(false);
		this.add(txtOriginal);

		// Translated text area
		txtTranslated = new JTextArea();
		txtTranslated.setFont(new Font("SERIF", Font.ITALIC, 30));
		txtTranslated.setEditable(false);
		this.add(txtTranslated);
		
		btn2 = new JButton("Создать список часто повторяющихся слов");
		// btn2.addActionListener(new ...());//метод выводящий перевод слова из
		// базы
		this.add(btn2);

		// Action button
		btn = new JButton("Начать изучение слов из полученого списка");
		// btn.addActionListener(new ...());//метод выводящий определённое слово
		// из базы
		this.add(btn);		

		btn3 = new JButton("Добавить слова из текстового файла в словарь");
		// btn3.addActionListener(new Scan());// метод добавляющий слова из
		// текстового файла в базу
		this.add(btn3);
		
		btn4 = new JButton("Добавить слова из PDF файла в словарь");
		// btn3.addActionListener(new Scan());// метод добавляющий слова из
		// текстового файла в базу
		this.add(btn4);

		btn.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				if (n < listWords.size()) {
					txtOriginal.setText("                            " 
				+ "[ " + listWords.get(n).getValue() + " ]" ); 

				}
				if (n != 0 && n <= listWords.size()) {
					txtTranslated.setText("   " 
				+ "[ " + listWords.get(n - 1).getValue() + " ]" + " перевод:  "
				+ listWords.get(n - 1).getTranslation());

				}
				n++;
			}

		});

		btn2.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				listWords = wordService.valueTranslation();

			}

		});

		btn3.addActionListener(new ActionListener() {

			private String fileName;

			@Override
			public void actionPerformed(ActionEvent e) {

				JFileChooser fileopen = new JFileChooser();
				int ret = fileopen.showDialog(null, "Выберите текстовый файл");
				if (ret == JFileChooser.APPROVE_OPTION) {
					File file = fileopen.getSelectedFile();
					fileName = file.toString();
				}

				List<String> listStringsFromTXT = FileReader.getListOfStringsFromTxt(fileName);
				StringBuilder sb = new StringBuilder();
				for (String s : listStringsFromTXT) {
					sb.append(s);
				}
				List<Word> words = new LinkedList<>();

				words.addAll(StringParser.getWordsStrings(sb.toString()));

				for (Word w : words) {
					WordService word = new WordService();
					word.addWord(w);
				}

			}

		});
		
		btn4.addActionListener(new ActionListener() {

			private String fileName;

			@Override
			public void actionPerformed(ActionEvent e) {

				JFileChooser fileopen = new JFileChooser();
				int ret = fileopen.showDialog(null, "Выберите PDF файл");
				if (ret == JFileChooser.APPROVE_OPTION) {
					File file = fileopen.getSelectedFile();
					fileName = file.toString();
				}

				List<String> listStringsFromPDF = FileReader.getListOfStringsFromPDF(fileName);
				StringBuilder sb = new StringBuilder();
				for (String s : listStringsFromPDF) {
					sb.append(s);
				}
				List<Word> words = new LinkedList<>();

				words.addAll(StringParser.getWordsStrings(sb.toString()));

				for (Word w : words) {
					WordService word = new WordService();
					word.addWord(w);
				}

			}

		});

	}

	

	public JTextArea getTxtOriginal() {
		return txtOriginal;
	}

	public void setTxtOriginal(JTextArea txtOriginal) {
		this.txtOriginal = txtOriginal;
	}

	public JTextArea getTxtTranslated() {
		return txtTranslated;
	}

	public void setTxtTranslated(JTextArea txtTranslated) {
		this.txtTranslated = txtTranslated;
	}

}
